package lc20240529;

import lc20240526.ListNode;

/**
  * @description 旋转链表,给你一个链表的头节点 head ，旋转链表，将链表每个节点向右移动 k 个位置。
  * @author 不知名帅哥
  * @date 2024/5/29 21:25
  * @version 1.0
*/
public class SpinLinkedList {
    public static void main(String[] args) {
        ListNode head = new ListNode(1, new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5)))));

        ListNode res=rotateRight(head, 7);
        while (res != null) {
            System.out.print(res.val + " ");
            res = res.next;
        }


    }
    //先连接成环，然后在对应的地方断链，注意下标。
    public static ListNode rotateRight(ListNode head, int k) {
        ListNode p=head;
        int count=1;
        while (p!=null){
            if (p.next==null){
                break;
            }
            count++;
            p=p.next;
        }
//        System.out.println(count);
        if (k%count==0){
            return head;
        }
        //连接成环。
        p.next=head;

        int i=1;
        int n=k%count;
        while (count-i>n){
            if (head!=null){
                head=head.next;
            }
            i++;
        }
        //断链
        ListNode res=head.next;
        head.next=null;
        return res;
    }
}
